﻿#region 참조 네임스페이스

using System;
using Skying.Diagnostics.Logger.Coodinator;
using System.Diagnostics;

#endregion

namespace Skying.Diagnostics.Logger.Entry
{
	/// <summary>
	/// <see cref="Skying.Diagnostics.Logger.Logger"/>를 통해 로깅할 때 콘솔을 통해 로그를 출력하는 <see cref="Skying.Diagnostics.Logger.Entry.ILogEntry"/>의 구현체를 정의한다.
	/// </summary>
	class ConsoleLogEntry : LogEntry
	{
		#region 프로퍼티

		/// <summary>
		/// 콘솔에 기록되는 로그에 색상을 적용하는지 여부를 가져온다.
		/// </summary>
		public bool IsColored
		{
			get;
			private set;
		}

		#endregion

		#region 생성자/소멸자

		public ConsoleLogEntry(string entryName, LogCoodinator coodinator, bool isColored)
			: base(entryName, coodinator)
		{
			this.IsColored = isColored;
		}

		#endregion

		#region 로깅

		/// <summary>
		/// 로그 메시지를 콘솔에 기록한다.
		/// </summary>
		/// <param name="message">로깅할 메시지를 설정한다.</param>
		/// <param name="logSeverity">로그 심각도를 설정한다.</param>
		/// <param name="logDateTime">로깅 일시를 설정한다.</param>
		/// <param name="stackFrame">로그 발생 지점의 <see cref="System.Diagnostics.StackFrame"/>을 설정한다.</param>
		/// <param name="exception">로깅할 <see cref="System.Exception"/> 정보를 설정한다. null을 허용한다.</param>
		public override void Log(string message, LogSeverity logSeverity, DateTime logDateTime, StackFrame stackFrame, Exception exception = null)
		{
			Console.Write(base.Coodinator.Print(message, logSeverity, logDateTime, stackFrame, exception));
		}

		#endregion
	}
}